package com.huitong.common.redis.hander;

import cn.hutool.core.util.StrUtil;
import org.redisson.api.NameMapper;

/**
 * Redis缓存key的前缀处理
 *
 * @author fromdrowning
 * @date 2024/3/16 20:57
 */
public class KeyPrefixHandler implements NameMapper {

    /**
     * Redis缓存key的前缀
     */
    private final String keyPrefix;

    /**
     * Redis缓存key的前缀处理
     *
     * @param keyPrefix Redis缓存key的前缀
     */
    public KeyPrefixHandler(String keyPrefix) {
        // 前缀为空 则返回空前缀
        this.keyPrefix = StrUtil.isBlank(keyPrefix) ? StrUtil.EMPTY : keyPrefix + ":";
    }

    /**
     * 增加Redis缓存key的前缀
     *
     * @param name Redis缓存的key
     * @return 增加前缀后的Redis缓存key
     */
    @Override
    public String map(String name) {
        if (StrUtil.isBlank(name)) {
            return null;
        }

        if (StrUtil.isNotBlank(keyPrefix) && !name.startsWith(keyPrefix)) {
            return keyPrefix + name;
        }

        return name;
    }

    /**
     * 去除Redis缓存key的前缀
     *
     * @param name Redis缓存的key
     * @return 去除前缀后的Redis缓存key
     */
    @Override
    public String unmap(String name) {
        if (StrUtil.isBlank(name)) {
            return null;
        }

        if (StrUtil.isNotBlank(keyPrefix) && name.startsWith(keyPrefix)) {
            return name.substring(keyPrefix.length());
        }

        return name;
    }
}
